package dtos;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import models.ArcadiaLog;
import models.ArcadianoNivel;
import models.Localidad;
import models.Organizacion;
import models.OrigenDato;
import models.Rama;
import models.Rubro;
import models.Sector;
import models.Subrubro;
import utils.ArcadiaConstants;
import utils.DateHelper;

public class OrganizacionDto {

	public Long id;
	public boolean iscliente = false;
	public boolean isproveedor = false;
	public boolean ismedio = false;
	public boolean isintermediario = false;
	public boolean isotro = false;

	public ArcadiaConstants.TIPO_PERSONA persona;

	public String razonSocial = "";
	public String tratamiento;
	public String ejecutivoNivel1;
	public String ejecutivoNivel2;
	public String ejecutivoNivel3;
	public String nombre;
	public String apellido;
	public String marcaComercial;

	public String pareja;

	public OrigenDato origenDato;

	public String cuit;

	public String condicionIva;
	
	public String contacto;

	public String domicilio;

	public String piso;

	public String oficina;

	public Localidad localidad;

	public String cp;

	public String web;

	public String mail;

	public String telefono;

	public String celular;

	public String fax;

	public String observaciones;

	public Sector sector;
	public Rama rama;
	public Rubro rubro;
	public Subrubro subrubro;

	public Organizacion intermediario;

	public List<ArcadianoNivel> arcadianos;

	public ArcadiaLog lastLogs;

	public String getActualizado() {
		if (lastLogs != null)
			return DateHelper.getFechaHora(lastLogs.fecha).concat(" - ")
					.concat(lastLogs.user.username);
		else
			return "";
	}

	public void asociarArcadiano(ArcadianoNivel arcadiano) {
		if (arcadianos == null)
			arcadianos = new ArrayList<ArcadianoNivel>();
		arcadianos.add(arcadiano);
	}

	public ArcadianoNivel getArcadiano(Long id) {
		if (arcadianos != null)
			for (ArcadianoNivel arcadiano : arcadianos) {
				if (arcadiano.arcadiano.id.equals(id))
					return arcadiano;
			}
		return null;
	}

	public void removeArcadiano(ArcadianoNivel arcadiano) {
		if (arcadianos != null)
			arcadianos.remove(arcadiano);
	}

	public String toString() {
		String name = "";
		if (razonSocial != null && !"".equals(razonSocial.trim()))
			name = name.concat(razonSocial);
		if (nombre != null && !"".equals(nombre.trim()))
			name = name.concat(" ").concat(nombre);
		if (apellido != null && !"".equals(apellido.trim()))
			name = name.concat(" ").concat(apellido);
		if (marcaComercial != null && !"".equals(marcaComercial.trim()))
			name = name.concat(" ").concat(marcaComercial);
		if ("".equals(name.trim()))
			return "Sin Nombre";

		return name;
	}

	public String arcadianos() {
		String arc = "";
		if (arcadianos != null) {
			for (ArcadianoNivel arcadiano : orderArcadianoNivel(arcadianos)) {
				arc = arc.concat(", ");
				arc = arc.concat(arcadiano.arcadiano.nombre);
			}
			arc = arc.replaceFirst(",", "");
		}
		return arc;
	}

	private static List<ArcadianoNivel> orderArcadianoNivel(
			List<ArcadianoNivel> arcadianos) {
		Collections.sort(arcadianos, new Comparator() {

			public int compare(Object o1, Object o2) {
				ArcadianoNivel e1 = (ArcadianoNivel) o1;
				ArcadianoNivel e2 = (ArcadianoNivel) o2;
				return Integer.valueOf(e1.level).compareTo(
						Integer.valueOf(e2.level));
			}
		});
		return arcadianos;
	}
}
